ಪೈಥಾನ್ ಬಳಸಿ IoT ಗಾಗಿ MQTT ಪ್ರೋಟೋಕಾಲ್ನಲ್ಲಿ ಪರಿಣತಿ ಪಡೆಯಿರಿ. ಈ ಆಳವಾದ ಮಾರ್ಗದರ್ಶಿಯು ತತ್ವಗಳು, ಪಹೋ-MQTT ಲೈಬ್ರರಿ, ಭದ್ರತೆ ಮತ್ತು ನೈಜ-ಪ್ರಪಂಚದ ಯೋಜನಾ ಅನುಷ್ಠಾನವನ್ನು ಒಳಗೊಂಡಿದೆ.
IoT ಗಾಗಿ ಪೈಥಾನ್: MQTT ಅನುಷ್ಠಾನಕ್ಕೆ ಒಂದು ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿ
ಸಂಪರ್ಕಿತ ಜಗತ್ತು: IoT ಪ್ರೋಟೋಕಾಲ್ಗಳು ಏಕೆ ಮುಖ್ಯ?
ನಾವು ಅಭೂತಪೂರ್ವ ಸಂಪರ್ಕದ ಯುಗದಲ್ಲಿ ಬದುಕುತ್ತಿದ್ದೇವೆ. ಇಂಟರ್ನೆಟ್ ಆಫ್ ಥಿಂಗ್ಸ್ (IoT) ಇನ್ನು ಮುಂದೆ ಭವಿಷ್ಯದ ಪರಿಕಲ್ಪನೆಯಾಗಿಲ್ಲ; ಇದು ಜಾಗತಿಕ ವಾಸ್ತವವಾಗಿದೆ, ಇದು ನಮ್ಮ ಪರಿಸರವನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡುವ, ನಮ್ಮ ಮನೆಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತಗೊಳಿಸುವ, ನಮ್ಮ ಕೈಗಾರಿಕೆಗಳನ್ನು ಉತ್ತಮಗೊಳಿಸುವ ಮತ್ತು ನಮ್ಮ ನಗರಗಳನ್ನು ಸುಧಾರಿಸುವ ಶತಕೋಟಿ ಸ್ಮಾರ್ಟ್ ಸಾಧನಗಳ ಜಾಲವನ್ನು ಮೌನವಾಗಿ ಹೆಣೆಯುತ್ತದೆ. ಸಿಯೋಲ್ನಲ್ಲಿರುವ ಮನೆಯಲ್ಲಿರುವ ಸ್ಮಾರ್ಟ್ ಥರ್ಮೋಸ್ಟಾಟ್ನಿಂದ ಹಿಡಿದು ಗ್ರಾಮೀಣ ಕೀನ್ಯಾದ ಹೊಲದಲ್ಲಿರುವ ಕೃಷಿ ಸಂವೇದಕದವರೆಗೆ, ಈ ಸಾಧನಗಳು ದೊಡ್ಡ ಪ್ರಮಾಣದ ಡೇಟಾವನ್ನು ಉತ್ಪಾದಿಸುತ್ತಿವೆ. ಆದರೆ ಅವೆಲ್ಲವೂ ಪರಸ್ಪರ ಮತ್ತು ಕ್ಲೌಡ್ನೊಂದಿಗೆ ಹೇಗೆ ಸಂವಹನ ನಡೆಸುತ್ತವೆ, ವಿಶೇಷವಾಗಿ ಅವು ಸಾಮಾನ್ಯವಾಗಿ ಚಿಕ್ಕದಾಗಿ, ಕಡಿಮೆ ಶಕ್ತಿಯುಳ್ಳದ್ದಾಗಿದ್ದಾಗ ಮತ್ತು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ನೆಟ್ವರ್ಕ್ಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿರುವಾಗ? ಉತ್ತರವು ವಿಶೇಷ ಸಂವಹನ ಪ್ರೋಟೋಕಾಲ್ಗಳಲ್ಲಿದೆ.
ನಾವು ಪ್ರತಿದಿನ ಬಳಸುವ ಹೆಚ್ಚಿನ ವೆಬ್ಗೆ HTTP ಪ್ರೋಟೋಕಾಲ್ ಶಕ್ತಿ ನೀಡುತ್ತದೆ, ಆದರೆ ಇದು ಸಾಮಾನ್ಯವಾಗಿ IoT ಯ ನಿರ್ಬಂಧಿತ ಜಗತ್ತಿಗೆ ತುಂಬಾ ಭಾರವಾಗಿರುತ್ತದೆ ಮತ್ತು ಹೆಚ್ಚು ಶಕ್ತಿ-ಹಸಿದಿರುತ್ತದೆ. ಯಂತ್ರದಿಂದ ಯಂತ್ರಕ್ಕೆ (M2M) ಸಂವಹನಕ್ಕಾಗಿ ನಿರ್ದಿಷ್ಟವಾಗಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾದ ಪ್ರೋಟೋಕಾಲ್ಗಳು ಇಲ್ಲಿ ಮಿಂಚುತ್ತವೆ. ಅವುಗಳಲ್ಲಿ, ಒಂದು ಪ್ರಬಲ ಶಕ್ತಿಯಾಗಿ ಹೊರಹೊಮ್ಮಿದೆ: MQTT.
IoT ಜಾಗದಲ್ಲಿ ಅತ್ಯಂತ ಬಹುಮುಖ ಮತ್ತು ಜನಪ್ರಿಯ ಪ್ರೋಗ್ರಾಮಿಂಗ್ ಭಾಷೆಗಳಲ್ಲಿ ಒಂದಾದ ಪೈಥಾನ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು MQTT ಯ ಶಕ್ತಿಯನ್ನು ಬಳಸಿಕೊಳ್ಳಲು ಬಯಸುವ ವಿಶ್ವಾದ್ಯಂತದ ಡೆವಲಪರ್ಗಳು, ಎಂಜಿನಿಯರ್ಗಳು ಮತ್ತು ಹವ್ಯಾಸಿಗಳಿಗಾಗಿ ಈ ಸಮಗ್ರ ಮಾರ್ಗದರ್ಶಿಯನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ. MQTT ಯ ಮೂಲಭೂತ ಪರಿಕಲ್ಪನೆಗಳಿಂದ ಸುರಕ್ಷಿತ, ದೃಢವಾದ ಮತ್ತು ಸ್ಕೇಲೆಬಲ್ IoT ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸುವವರೆಗೆ ನಾವು ಪ್ರಯಾಣಿಸುತ್ತೇವೆ.
MQTT ಎಂದರೇನು? ನಿರ್ಬಂಧಗಳಿಗಾಗಿ ನಿರ್ಮಿಸಲಾದ ಪ್ರೋಟೋಕಾಲ್
MQTT ಎಂದರೆ ಮೆಸೇಜ್ ಕ್ಯೂಯಿಂಗ್ ಟೆಲಿಮೆಟ್ರಿ ಟ್ರಾನ್ಸ್ಪೋರ್ಟ್. ಇದನ್ನು 1999 ರಲ್ಲಿ IBM ನ ಡಾ. ಆಂಡಿ ಸ್ಟ್ಯಾನ್ಫೋರ್ಡ್-ಕ್ಲಾರ್ಕ್ ಮತ್ತು ಆರ್ಕಾಮ್ನ (ಈಗ ಸಿರ್ಕಸ್ ಲಿಂಕ್) ಅರ್ಲೆನ್ ನಿಪ್ಪರ್ ಅವರು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ಉಪಗ್ರಹ ಜಾಲಗಳ ಮೂಲಕ ತೈಲ ಪೈಪ್ಲೈನ್ಗಳನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಕಂಡುಹಿಡಿದರು. ಇದರ ಮೂಲ ಕಥೆಯು ಅದರ ಉದ್ದೇಶವನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ವಿವರಿಸುತ್ತದೆ: ಗಮನಾರ್ಹ ನಿರ್ಬಂಧಗಳಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ ಸಾಧನಗಳಿಗಾಗಿ ಹಗುರವಾದ, ವಿಶ್ವಾಸಾರ್ಹ ಮತ್ತು ಪರಿಣಾಮಕಾರಿ ಸಂದೇಶ ಪ್ರೋಟೋಕಾಲ್ ಆಗಿರುವುದು.
ಪ್ರಕಟಿಸು/ಚಂದಾದಾರಿಕೆ (Pub/Sub) ಮಾದರಿ ವಿವರಿಸಲಾಗಿದೆ
MQTT ಯ ಹೃದಯಭಾಗದಲ್ಲಿ ಸೊಗಸಾದ ಪ್ರಕಟಿಸು/ಚಂದಾದಾರಿಕೆ ವಾಸ್ತುಶಿಲ್ಪದ ಮಾದರಿ ಇದೆ. ಅನೇಕ ಡೆವಲಪರ್ಗಳು ಪರಿಚಿತವಾಗಿರುವ HTTP ಯ ವಿನಂತಿ/ಪ್ರತಿಕ್ರಿಯೆ ಮಾದರಿಯಿಂದ ಇದು ಮೂಲಭೂತ ವ್ಯತ್ಯಾಸವಾಗಿದೆ. ಕ್ಲೈಂಟ್ ನೇರವಾಗಿ ಸರ್ವರ್ನಿಂದ ಮಾಹಿತಿಯನ್ನು ವಿನಂತಿಸುವ ಬದಲು, ಸಂವಹನವನ್ನು ಡಿಕಪಲ್ ಮಾಡಲಾಗುತ್ತದೆ.
ಜಾಗತಿಕ ಸುದ್ದಿ ಸಂಸ್ಥೆಯನ್ನು ಕಲ್ಪಿಸಿಕೊಳ್ಳಿ. ಪತ್ರಕರ್ತರು (ಪ್ರಕಾಶಕರು) ತಮ್ಮ ಕಥೆಗಳನ್ನು ಪ್ರತಿ ಓದುಗರಿಗೆ ನೇರವಾಗಿ ಕಳುಹಿಸುವುದಿಲ್ಲ. ಬದಲಿಗೆ, ಅವರು ತಮ್ಮ ಕಥೆಗಳನ್ನು ಸಂಸ್ಥೆಯ ಕೇಂದ್ರ ಹಬ್ಗೆ (ಬ್ರೋಕರ್) ಕಳುಹಿಸುತ್ತಾರೆ ಮತ್ತು ಅವುಗಳನ್ನು "ವಿಶ್ವ ರಾಜಕೀಯ" ಅಥವಾ "ತಂತ್ರಜ್ಞಾನ" ದಂತಹ ನಿರ್ದಿಷ್ಟ ವಿಷಯಗಳ ಅಡಿಯಲ್ಲಿ ವರ್ಗೀಕರಿಸುತ್ತಾರೆ. ಓದುಗರು (ಚಂದಾದಾರರು) ನವೀಕರಣಗಳಿಗಾಗಿ ಪತ್ರಕರ್ತರನ್ನು ಕೇಳಬೇಕಾಗಿಲ್ಲ; ಅವರು ಸರಳವಾಗಿ ತಾವು ಆಸಕ್ತಿ ಹೊಂದಿರುವ ವಿಷಯಗಳನ್ನು ಸಂಸ್ಥೆಗೆ ತಿಳಿಸುತ್ತಾರೆ. ನಂತರ ಸಂಸ್ಥೆಯು ಆ ವಿಷಯಗಳ ಕುರಿತ ಯಾವುದೇ ಹೊಸ ಕಥೆಗಳನ್ನು ಆಸಕ್ತಿ ಹೊಂದಿರುವ ಓದುಗರಿಗೆ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ರವಾನಿಸುತ್ತದೆ. ಪತ್ರಕರ್ತರು ಮತ್ತು ಓದುಗರು ಪರಸ್ಪರರ ಅಸ್ತಿತ್ವ, ಸ್ಥಳ ಅಥವಾ ಸ್ಥಿತಿಯ ಬಗ್ಗೆ ತಿಳಿದುಕೊಳ್ಳಬೇಕಾಗಿಲ್ಲ.
MQTT ಯಲ್ಲಿ, ಈ ಮಾದರಿಯು ಡೇಟಾವನ್ನು ಕಳುಹಿಸುವ ಸಾಧನವನ್ನು (ಪ್ರಕಾಶಕ) ಅದನ್ನು ಸ್ವೀಕರಿಸುವ ಸಾಧನ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್ನಿಂದ (ಚಂದಾದಾರ) ಬೇರ್ಪಡಿಸುತ್ತದೆ. ಇದು IoT ಗೆ ನಂಬಲಾಗದಷ್ಟು ಶಕ್ತಿಶಾಲಿಯಾಗಿದೆ ಏಕೆಂದರೆ:
- ಸ್ಪೇಸ್ ಡಿಕಪಲಿಂಗ್ (Space Decoupling): ಪ್ರಕಾಶಕ ಮತ್ತು ಚಂದಾದಾರರು ಪರಸ್ಪರರ IP ವಿಳಾಸ ಅಥವಾ ಸ್ಥಳವನ್ನು ತಿಳಿದುಕೊಳ್ಳಬೇಕಾಗಿಲ್ಲ.
- ಟೈಮ್ ಡಿಕಪಲಿಂಗ್ (Time Decoupling): ಅವು ಒಂದೇ ಸಮಯದಲ್ಲಿ ಕಾರ್ಯನಿರ್ವಹಿಸಬೇಕಾಗಿಲ್ಲ. ಸಿಸ್ಟಮ್ ಅನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಿದ್ದರೆ, ಸಂವೇದಕವು ಓದುವಿಕೆಯನ್ನು ಪ್ರಕಟಿಸಬಹುದು ಮತ್ತು ಅಪ್ಲಿಕೇಶನ್ ಅದನ್ನು ಗಂಟೆಗಳ ನಂತರ ಸ್ವೀಕರಿಸಬಹುದು.
- ಸಿಂಕ್ರೊನೈಸೇಶನ್ ಡಿಕಪಲಿಂಗ್ (Synchronization Decoupling): ಸಂದೇಶ ವಿನಿಮಯವನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಇನ್ನೊಂದಕ್ಕಾಗಿ ಕಾಯಲು ಎರಡೂ ಕಡೆಗಳ ಕಾರ್ಯಾಚರಣೆಗಳನ್ನು ನಿಲ್ಲಿಸಬೇಕಾಗಿಲ್ಲ.
MQTT ಪರಿಸರ ವ್ಯವಸ್ಥೆಯ ಪ್ರಮುಖ ಘಟಕಗಳು
MQTT ವಾಸ್ತುಶಿಲ್ಪವು ಕೆಲವು ಪ್ರಮುಖ ಘಟಕಗಳ ಮೇಲೆ ನಿರ್ಮಿತವಾಗಿದೆ:
- ಬ್ರೋಕರ್ (Broker): ಕೇಂದ್ರ ಹಬ್ ಅಥವಾ ಸರ್ವರ್. ಇದು MQTT ಪ್ರಪಂಚದ ಅಂಚೆ ಕಚೇರಿ. ಪ್ರಕಾಶಕರಿಂದ ಎಲ್ಲಾ ಸಂದೇಶಗಳನ್ನು ಸ್ವೀಕರಿಸಲು, ಅವುಗಳನ್ನು ವಿಷಯದ ಮೂಲಕ ಫಿಲ್ಟರ್ ಮಾಡಲು ಮತ್ತು ಸೂಕ್ತ ಚಂದಾದಾರರಿಗೆ ಕಳುಹಿಸಲು ಬ್ರೋಕರ್ ಜವಾಬ್ದಾರವಾಗಿದೆ. ಜನಪ್ರಿಯ ಬ್ರೋಕರ್ಗಳಲ್ಲಿ Mosquitto ಮತ್ತು VerneMQ ನಂತಹ ಓಪನ್ ಸೋರ್ಸ್ ಆಯ್ಕೆಗಳು, ಮತ್ತು AWS IoT Core, Azure IoT Hub, ಹಾಗೂ Google Cloud IoT Core ನಂತಹ ನಿರ್ವಹಿಸಲ್ಪಡುವ ಕ್ಲೌಡ್ ಸೇವೆಗಳು ಸೇರಿವೆ.
- ಕ್ಲೈಂಟ್ (Client): ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಿಸುವ ಯಾವುದೇ ಸಾಧನ ಅಥವಾ ಅಪ್ಲಿಕೇಶನ್. ಕ್ಲೈಂಟ್ ಪ್ರಕಾಶಕ, ಚಂದಾದಾರ ಅಥವಾ ಎರಡೂ ಆಗಿರಬಹುದು. IoT ಸಂವೇದಕವು ಕ್ಲೈಂಟ್ ಆಗಿದೆ, ಮತ್ತು ಸಂವೇದಕ ಡೇಟಾವನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವ ಸರ್ವರ್ ಅಪ್ಲಿಕೇಶನ್ ಸಹ ಕ್ಲೈಂಟ್ ಆಗಿದೆ.
- ವಿಷಯ (Topic): ಸಂದೇಶಗಳಿಗೆ ವಿಳಾಸ ಅಥವಾ ಲೇಬಲ್ ಆಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುವ UTF-8 ಸ್ಟ್ರಿಂಗ್. ಸಂದೇಶಗಳನ್ನು ರೂಟ್ ಮಾಡಲು ಬ್ರೋಕರ್ ವಿಷಯಗಳನ್ನು ಬಳಸುತ್ತದೆ. ವಿಷಯಗಳು ಕ್ರಮಾನುಗತವಾಗಿವೆ, ಫೈಲ್ ಸಿಸ್ಟಮ್ ಮಾರ್ಗದಂತೆ ಫಾರ್ವರ್ಡ್ ಸ್ಲ್ಯಾಷ್ಗಳನ್ನು ಡಿಲಿಮಿಟರ್ಗಳಾಗಿ ಬಳಸುತ್ತವೆ. ಉದಾಹರಣೆಗೆ, ಲಂಡನ್ನಲ್ಲಿರುವ ಕಟ್ಟಡದ ಲಿವಿಂಗ್ ರೂಮ್ನಲ್ಲಿರುವ ತಾಪಮಾನ ಸಂವೇದಕಕ್ಕೆ ಉತ್ತಮ ವಿಷಯ ಹೀಗಿರಬಹುದು:
UK/London/Building-A/Floor-1/LivingRoom/Temperature. - ಪೇಲೋಡ್ (Payload): ಇದು ಸಂದೇಶದ ನಿಜವಾದ ಡೇಟಾ ವಿಷಯ. MQTT ಡೇಟಾ-ಅಜ್ಞೇಯವಾದಿ, ಅಂದರೆ ಪೇಲೋಡ್ ಏನಾದರೂ ಆಗಿರಬಹುದು: ಸರಳ ಸ್ಟ್ರಿಂಗ್, ಪೂರ್ಣಾಂಕ, JSON, XML, ಅಥವಾ ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡಲಾದ ಬೈನರಿ ಡೇಟಾ. JSON ಅದರ ನಮ್ಯತೆ ಮತ್ತು ಓದಲು ಸುಲಭವಾಗುವ ಕಾರಣದಿಂದಾಗಿ ಬಹಳ ಸಾಮಾನ್ಯ ಆಯ್ಕೆಯಾಗಿದೆ.
MQTT IoT ಸಂವಹನದಲ್ಲಿ ಏಕೆ ಪ್ರಾಬಲ್ಯ ಸಾಧಿಸುತ್ತದೆ
MQTT ಯ ವಿನ್ಯಾಸ ತತ್ವಗಳು ಅದನ್ನು IoT ಯ ಸವಾಲುಗಳಿಗೆ ಅಸಾಧಾರಣವಾಗಿ ಸೂಕ್ತವಾಗಿಸುತ್ತವೆ:
- ಹಗುರ: MQTT ಸಂದೇಶಗಳು ಬಹಳ ಚಿಕ್ಕ ಹೆಡರ್ ಅನ್ನು (ಕೇವಲ 2 ಬೈಟ್ಗಳಷ್ಟು) ಹೊಂದಿರುತ್ತವೆ, ಇದು ನೆಟ್ವರ್ಕ್ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ಬಳಕೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ. ದುಬಾರಿ ಸೆಲ್ಯುಲರ್ ಯೋಜನೆಗಳು ಅಥವಾ LoRaWAN ನಂತಹ ಕಡಿಮೆ ಬ್ಯಾಂಡ್ವಿಡ್ತ್ ನೆಟ್ವರ್ಕ್ಗಳಲ್ಲಿನ ಸಾಧನಗಳಿಗೆ ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
- ದಕ್ಷ: ಪ್ರೋಟೋಕಾಲ್ನ ಕಡಿಮೆ ಓವರ್ಹೆಡ್ ನೇರವಾಗಿ ಕಡಿಮೆ ವಿದ್ಯುತ್ ಬಳಕೆಗೆ ಅನುವಾದಿಸುತ್ತದೆ, ಇದು ಬ್ಯಾಟರಿ ಚಾಲಿತ ಸಾಧನಗಳಿಗೆ ತಿಂಗಳುಗಟ್ಟಲೆ ಅಥವಾ ವರ್ಷಗಟ್ಟಲೆ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
- ವಿಶ್ವಾಸಾರ್ಹ: ಇದು ಸಂದೇಶ ವಿತರಣೆಯನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಒಳಗೊಂಡಿದೆ, ಅಸ್ಥಿರ, ಹೆಚ್ಚಿನ ಲೇಟೆನ್ಸಿ ನೆಟ್ವರ್ಕ್ಗಳಲ್ಲೂ ಸಹ. ಇದನ್ನು ಸೇವಾ ಗುಣಮಟ್ಟದ ಮಟ್ಟಗಳ ಮೂಲಕ ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ.
- ಸ್ಕೇಲೆಬಲ್: ಒಂದೇ ಬ್ರೋಕರ್ ಏಕಕಾಲದಲ್ಲಿ ಸಾವಿರಾರು ಅಥವಾ ಮಿಲಿಯನ್ಗಟ್ಟಲೆ ಕ್ಲೈಂಟ್ಗಳಿಂದ ಸಂಪರ್ಕಗಳನ್ನು ನಿರ್ವಹಿಸಬಲ್ಲದು, ಇದು ದೊಡ್ಡ ಪ್ರಮಾಣದ ನಿಯೋಜನೆಗಳಿಗೆ ಸೂಕ್ತವಾಗಿದೆ.
- ದ್ವಿದಿಶೀಯ: MQTT ಸಾಧನದಿಂದ ಕ್ಲೌಡ್ಗೆ (ಟೆಲಿಮೆಟ್ರಿ) ಮತ್ತು ಕ್ಲೌಡ್ನಿಂದ ಸಾಧನಕ್ಕೆ (ಕಮಾಂಡ್ಗಳು) ಸಂವಹನಕ್ಕೆ ಅನುಮತಿಸುತ್ತದೆ, ದೂರದಿಂದಲೇ ಸಾಧನಗಳನ್ನು ನಿಯಂತ್ರಿಸಲು ಇದು ಅತ್ಯಗತ್ಯ ಅವಶ್ಯಕತೆಯಾಗಿದೆ.
ಸೇವಾ ಗುಣಮಟ್ಟ (QoS) ಅರ್ಥಮಾಡಿಕೊಳ್ಳುವುದು
MQTT ಮೂರು ಹಂತದ ಸೇವಾ ಗುಣಮಟ್ಟವನ್ನು (QoS) ಒದಗಿಸುತ್ತದೆ, ಇದು ಡೆವಲಪರ್ಗಳಿಗೆ ತಮ್ಮ ನಿರ್ದಿಷ್ಟ ಬಳಕೆಯ ಸಂದರ್ಭಕ್ಕೆ ವಿಶ್ವಾಸಾರ್ಹತೆ ಮತ್ತು ಓವರ್ಹೆಡ್ ನಡುವೆ ಸರಿಯಾದ ಸಮತೋಲನವನ್ನು ಆಯ್ಕೆ ಮಾಡಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ.
- QoS 0 (ಹೆಚ್ಚೆಂದರೆ ಒಮ್ಮೆ): ಇದು "ಫೈರ್ ಅಂಡ್ ಫರ್ಗೇಟ್" ಮಟ್ಟವಾಗಿದೆ. ಸಂದೇಶವನ್ನು ಒಮ್ಮೆ ಕಳುಹಿಸಲಾಗುತ್ತದೆ, ಬ್ರೋಕರ್ ಅಥವಾ ಅಂತಿಮ ಚಂದಾದಾರರಿಂದ ಸ್ವೀಕರಿಸಿದ್ದಕ್ಕೆ ಯಾವುದೇ ದೃಢೀಕರಣವಿಲ್ಲ. ಇದು ವೇಗವಾದ ವಿಧಾನವಾಗಿದೆ ಆದರೆ ವಿತರಣೆಯ ಗ್ಯಾರಂಟಿ ನೀಡುವುದಿಲ್ಲ. ಬಳಕೆಯ ಸಂದರ್ಭ: ಪ್ರತಿ 10 ಸೆಕೆಂಡ್ಗಳಿಗೆ ಕಳುಹಿಸಲಾದ ಸುತ್ತುವರಿದ ಕೊಠಡಿ ತಾಪಮಾನದ ಓದುವಿಕೆಯಂತಹ ನಿರ್ಣಾಯಕವಲ್ಲದ, ಹೆಚ್ಚಿನ ಆವರ್ತನದ ಸಂವೇದಕ ಡೇಟಾ. ಒಂದು ಓದುವಿಕೆಯನ್ನು ಕಳೆದುಕೊಳ್ಳುವುದು ಸಮಸ್ಯೆಯಲ್ಲ.
- QoS 1 (ಕನಿಷ್ಠ ಒಮ್ಮೆ): ಈ ಮಟ್ಟವು ಸಂದೇಶವನ್ನು ಕನಿಷ್ಠ ಒಂದು ಬಾರಿಯಾದರೂ ತಲುಪಿಸುತ್ತದೆ ಎಂದು ಖಾತರಿಪಡಿಸುತ್ತದೆ. ಸ್ವೀಕರಿಸುವವರಿಂದ ಒಪ್ಪಿಗೆ (PUBACK ಪ್ಯಾಕೆಟ್) ಸ್ವೀಕರಿಸುವವರೆಗೆ ಕಳುಹಿಸುವವರು ಸಂದೇಶವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತಾರೆ. ಒಪ್ಪಿಗೆ ಸ್ವೀಕರಿಸದಿದ್ದರೆ, ಸಂದೇಶವನ್ನು ಮರುಪ್ರಸಾರ ಮಾಡಲಾಗುತ್ತದೆ. ಒಪ್ಪಿಗೆ ಕಳೆದುಹೋದರೆ ಇದು ಕೆಲವೊಮ್ಮೆ ನಕಲು ಸಂದೇಶಗಳಿಗೆ ಕಾರಣವಾಗಬಹುದು. ಬಳಕೆಯ ಸಂದರ್ಭ: ಸ್ಮಾರ್ಟ್ ಲೈಟ್ ಆನ್ ಮಾಡಲು ಆಜ್ಞೆ. ಆಜ್ಞೆಯನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ ಎಂದು ನಿಮಗೆ ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಬೇಕು, ಮತ್ತು ಅದನ್ನು ಎರಡು ಬಾರಿ ಸ್ವೀಕರಿಸುವುದರಿಂದ ಯಾವುದೇ ಹಾನಿಯಾಗುವುದಿಲ್ಲ.
- QoS 2 (ನಿಖರವಾಗಿ ಒಮ್ಮೆ): ಇದು ಅತ್ಯಂತ ವಿಶ್ವಾಸಾರ್ಹ ಆದರೆ ನಿಧಾನವಾದ ಮಟ್ಟವಾಗಿದೆ. ಸಂದೇಶವನ್ನು ನಿಖರವಾಗಿ ಒಮ್ಮೆ, ನಕಲುಗಳಿಲ್ಲದೆ ತಲುಪಿಸುವುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಲು ಇದು ನಾಲ್ಕು-ಭಾಗದ ಹ್ಯಾಂಡ್ಶೇಕ್ ಅನ್ನು ಬಳಸುತ್ತದೆ. ಬಳಕೆಯ ಸಂದರ್ಭ: ಆರ್ಥಿಕ ವ್ಯವಹಾರ, ನಿಖರವಾದ ಪ್ರಮಾಣದ ಔಷಧಿಗಳನ್ನು ವಿತರಿಸಲು ಆಜ್ಞೆ, ಅಥವಾ ಕಾರ್ಖಾನೆಯಲ್ಲಿ ರೋಬೋಟಿಕ್ ಆರ್ಮ್ ಅನ್ನು ನಿಯಂತ್ರಿಸುವಂತಹ ನಕಲುಗಳು ದುರಂತವಾಗಬಲ್ಲ ನಿರ್ಣಾಯಕ ಕಾರ್ಯಾಚರಣೆಗಳು.
ನಿಮ್ಮ ಪೈಥಾನ್ MQTT ಪರಿಸರವನ್ನು ಸ್ಥಾಪಿಸುವುದು
ಈಗ, ಪ್ರಾಯೋಗಿಕ ವಿಷಯಕ್ಕೆ ಬರೋಣ. ಪೈಥಾನ್ನೊಂದಿಗೆ MQTT ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಪ್ರಾರಂಭಿಸಲು, ನಿಮಗೆ ಎರಡು ವಿಷಯಗಳು ಬೇಕಾಗುತ್ತವೆ: MQTT ಕ್ಲೈಂಟ್ಗಾಗಿ ಪೈಥಾನ್ ಲೈಬ್ರರಿ ಮತ್ತು ಸಂವಹನ ಮಾಡಲು MQTT ಬ್ರೋಕರ್.
ಪೈಥಾನ್ MQTT ಲೈಬ್ರರಿಯನ್ನು ಆರಿಸುವುದು: Paho-MQTT
ಪೈಥಾನ್ಗಾಗಿ ಹೆಚ್ಚು ವ್ಯಾಪಕವಾಗಿ ಬಳಸಲಾಗುವ ಮತ್ತು ಪ್ರಬುದ್ಧ MQTT ಲೈಬ್ರರಿ ಎಂದರೆ ಎಕ್ಲಿಪ್ಸ್ ಫೌಂಡೇಶನ್ನ Paho-MQTT. ಇದು ದೃಢವಾದ, ವೈಶಿಷ್ಟ್ಯ-ಭರಿತ ಲೈಬ್ರರಿಯಾಗಿದ್ದು, ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಿಸಲು ಮತ್ತು ವಿಷಯಗಳಿಗೆ ಪ್ರಕಟಿಸಲು ಅಥವಾ ಚಂದಾದಾರರಾಗಲು ಕ್ಲೈಂಟ್ ವರ್ಗವನ್ನು ಒದಗಿಸುತ್ತದೆ. ಪೈಥಾನ್ನ ಪ್ಯಾಕೇಜ್ ಮ್ಯಾನೇಜರ್ ಆದ pip ಅನ್ನು ಬಳಸಿಕೊಂಡು ಇದನ್ನು ಸ್ಥಾಪಿಸುವುದು ಸುಲಭ.
ನಿಮ್ಮ ಟರ್ಮಿನಲ್ ಅಥವಾ ಕಮಾಂಡ್ ಪ್ರಾಂಪ್ಟ್ ತೆರೆಯಿರಿ ಮತ್ತು ಚಲಾಯಿಸಿ:
pip install paho-mqtt
ಈ ಒಂದೇ ಆಜ್ಞೆಯು ಪೈಥಾನ್ನಲ್ಲಿ MQTT ಕ್ಲೈಂಟ್ಗಳನ್ನು ಬರೆಯಲು ನಿಮಗೆ ಬೇಕಾದ ಎಲ್ಲವನ್ನೂ ಸ್ಥಾಪಿಸುತ್ತದೆ.
MQTT ಬ್ರೋಕರ್ ಅನ್ನು ಸ್ಥಾಪಿಸುವುದು
ಬ್ರೋಕರ್ಗಾಗಿ ನಿಮಗೆ ಹಲವಾರು ಆಯ್ಕೆಗಳಿವೆ, ಅಭಿವೃದ್ಧಿಗಾಗಿ ನಿಮ್ಮ ಸ್ಥಳೀಯ ಯಂತ್ರದಲ್ಲಿ ಒಂದನ್ನು ಚಲಾಯಿಸುವುದರಿಂದ ಹಿಡಿದು ಉತ್ಪಾದನೆಗಾಗಿ ಶಕ್ತಿಶಾಲಿ ಕ್ಲೌಡ್ ಸೇವೆಯನ್ನು ಬಳಸುವವರೆಗೆ.
- ಸ್ಥಳೀಯ ಬ್ರೋಕರ್ (ಅಭಿವೃದ್ಧಿ ಮತ್ತು ಕಲಿಕೆಗಾಗಿ): ಸ್ಥಳೀಯ ಬ್ರೋಕರ್ಗಾಗಿ ಹೆಚ್ಚು ಜನಪ್ರಿಯ ಆಯ್ಕೆ Mosquitto, ಇದು ಮತ್ತೊಂದು ಎಕ್ಲಿಪ್ಸ್ ಪ್ರಾಜೆಕ್ಟ್. ಇದು ಹಗುರವಾದ, ಓಪನ್-ಸೋರ್ಸ್ ಮತ್ತು ಸ್ಥಾಪಿಸಲು ಸುಲಭ.
- ಡೆಬಿಯಾನ್-ಆಧಾರಿತ ಲಿನಕ್ಸ್ನಲ್ಲಿ (ಉಬುಂಟು, ರಾಸ್ಪ್ಬೆರಿ ಪೈ ಓಎಸ್ನಂತೆ):
sudo apt-get update && sudo apt-get install mosquitto mosquitto-clients - macOS ನಲ್ಲಿ (ಹೋಮ್ಬ್ರೂ ಬಳಸಿ):
brew install mosquitto - ವಿಂಡೋಸ್ನಲ್ಲಿ: Mosquitto ವೆಬ್ಸೈಟ್ನಿಂದ ಸ್ಥಳೀಯ ಇನ್ಸ್ಟಾಲರ್ ಅನ್ನು ಡೌನ್ಲೋಡ್ ಮಾಡಿ.
127.0.0.1ಅಥವಾlocalhost) ಸೂಚಿಸುವ ಮೂಲಕ ನೀವು ಅದನ್ನು ಬಳಸಬಹುದು. - ಡೆಬಿಯಾನ್-ಆಧಾರಿತ ಲಿನಕ್ಸ್ನಲ್ಲಿ (ಉಬುಂಟು, ರಾಸ್ಪ್ಬೆರಿ ಪೈ ಓಎಸ್ನಂತೆ):
- ಸಾರ್ವಜನಿಕ/ಕ್ಲೌಡ್ ಬ್ರೋಕರ್ (ತ್ವರಿತ ಪರೀಕ್ಷೆಗಾಗಿ): ಏನನ್ನೂ ಸ್ಥಾಪಿಸದೆ ಆರಂಭಿಕ ಪ್ರಯೋಗಗಳಿಗಾಗಿ, ನೀವು ಉಚಿತ, ಸಾರ್ವಜನಿಕ ಬ್ರೋಕರ್ ಅನ್ನು ಬಳಸಬಹುದು. ಎರಡು ಜನಪ್ರಿಯವಾದವುಗಳು
test.mosquitto.orgಮತ್ತುbroker.hivemq.com. ಪ್ರಮುಖ: ಇವು ಸಾರ್ವಜನಿಕ ಮತ್ತು ಎನ್ಕ್ರಿಪ್ಟ್ ಮಾಡದವು. ಅವುಗಳಿಗೆ ಯಾವುದೇ ಸೂಕ್ಷ್ಮ ಅಥವಾ ಖಾಸಗಿ ಡೇಟಾವನ್ನು ಕಳುಹಿಸಬೇಡಿ. ಅವು ಕಲಿಕೆ ಮತ್ತು ಪರೀಕ್ಷೆಯ ಉದ್ದೇಶಗಳಿಗಾಗಿ ಮಾತ್ರ.
ಪ್ರಾಯೋಗಿಕ: ಪೈಥಾನ್ನೊಂದಿಗೆ ಪ್ರಕಟಿಸುವುದು ಮತ್ತು ಚಂದಾದಾರರಾಗುವುದು
ನಮ್ಮ ಮೊದಲ ಪೈಥಾನ್ MQTT ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಬರೆಯೋಣ. ನಾವು ಎರಡು ಪ್ರತ್ಯೇಕ ಸ್ಕ್ರಿಪ್ಟ್ಗಳನ್ನು ರಚಿಸುತ್ತೇವೆ: ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವ ಪ್ರಕಾಶಕ ಮತ್ತು ಅವುಗಳನ್ನು ಸ್ವೀಕರಿಸುವ ಚಂದಾದಾರ. ಈ ಉದಾಹರಣೆಗೆ, ನೀವು ಸ್ಥಳೀಯ Mosquitto ಬ್ರೋಕರ್ ಅನ್ನು ಚಲಾಯಿಸುತ್ತಿದ್ದೀರಿ ಎಂದು ನಾವು ಭಾವಿಸುತ್ತೇವೆ.
ಸರಳ MQTT ಪ್ರಕಾಶಕವನ್ನು ರಚಿಸುವುದು (publisher.py)
ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ ಎರಡು ಸೆಕೆಂಡ್ಗಳಿಗೆ `python/mqtt/test` ವಿಷಯಕ್ಕೆ "Hello, MQTT!" ಎಂಬ ಸಂದೇಶವನ್ನು ಪ್ರಕಟಿಸುತ್ತದೆ.
publisher.py ಹೆಸರಿನ ಫೈಲ್ ಅನ್ನು ರಚಿಸಿ ಮತ್ತು ಈ ಕೆಳಗಿನ ಕೋಡ್ ಅನ್ನು ಸೇರಿಸಿ:
import paho.mqtt.client as mqtt
import time
# --- ಸಂರಚನೆ ---
BROKER_ADDRESS = "localhost" # ಸಾರ್ವಜನಿಕ ಬ್ರೋಕರ್ಗಾಗಿ 'test.mosquitto.org' ಬಳಸಿ
PORT = 1883
TOPIC = "python/mqtt/test"
# --- ಸಂಪರ್ಕಕ್ಕಾಗಿ ಕಾಲ್ಬ್ಯಾಕ್ ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("MQTT ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ!")
else:
print(f"ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ, ರಿಟರ್ನ್ ಕೋಡ್ {rc}")
# --- ಮುಖ್ಯ ಸ್ಕ್ರಿಪ್ಟ್ ---
# 1. ಕ್ಲೈಂಟ್ ಇನ್ಸ್ಟೆನ್ಸ್ ರಚಿಸಿ
client = mqtt.Client("PublisherClient")
# 2. on_connect ಕಾಲ್ಬ್ಯಾಕ್ ಅನ್ನು ನಿಯೋಜಿಸಿ
client.on_connect = on_connect
# 3. ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಿಸಿ
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. ನೆಟ್ವರ್ಕ್ ಲೂಪ್ಗಾಗಿ ಹಿನ್ನೆಲೆ ಥ್ರೆಡ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ
client.loop_start()
try:
count = 0
while True:
count += 1
message = f"Hello, MQTT! Message #{count}"
# 5. ಸಂದೇಶವನ್ನು ಪ್ರಕಟಿಸಿ
result = client.publish(TOPIC, message)
# ಪ್ರಕಟಣೆ ಯಶಸ್ವಿಯಾಗಿದೆಯೇ ಎಂದು ಪರಿಶೀಲಿಸಿ
status = result[0]
if status == 0:
print(f"`{message}` ಅನ್ನು `{TOPIC}` ವಿಷಯಕ್ಕೆ ಕಳುಹಿಸಲಾಗಿದೆ")
else:
print(f"ಸಂದೇಶವನ್ನು {TOPIC} ವಿಷಯಕ್ಕೆ ಕಳುಹಿಸಲು ವಿಫಲವಾಗಿದೆ")
time.sleep(2)
except KeyboardInterrupt:
print("ಪ್ರಕಟಣೆ ನಿಲ್ಲಿಸಲಾಗಿದೆ.")
finally:
# 6. ನೆಟ್ವರ್ಕ್ ಲೂಪ್ ಅನ್ನು ನಿಲ್ಲಿಸಿ ಮತ್ತು ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ
client.loop_stop()
client.disconnect()
print("ಬ್ರೋಕರ್ನಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಿದೆ.")
ಸರಳ MQTT ಚಂದಾದಾರರನ್ನು ರಚಿಸುವುದು (subscriber.py)
ಈ ಸ್ಕ್ರಿಪ್ಟ್ ಅದೇ ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತದೆ, `python/mqtt/test` ವಿಷಯಕ್ಕೆ ಚಂದಾದಾರರಾಗುತ್ತದೆ ಮತ್ತು ಅದು ಸ್ವೀಕರಿಸುವ ಯಾವುದೇ ಸಂದೇಶಗಳನ್ನು ಮುದ್ರಿಸುತ್ತದೆ.
subscriber.py ಹೆಸರಿನ ಮತ್ತೊಂದು ಫೈಲ್ ಅನ್ನು ರಚಿಸಿ:
import paho.mqtt.client as mqtt
# --- ಸಂರಚನೆ ---
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "python/mqtt/test"
# --- ಕಾಲ್ಬ್ಯಾಕ್ ಕಾರ್ಯಗಳು ---
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("MQTT ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ!")
# ಯಶಸ್ವಿ ಸಂಪರ್ಕದ ನಂತರ ವಿಷಯಕ್ಕೆ ಚಂದಾದಾರರಾಗಿ
client.subscribe(TOPIC)
else:
print(f"ಸಂಪರ್ಕಿಸಲು ವಿಫಲವಾಗಿದೆ, ರಿಟರ್ನ್ ಕೋಡ್ {rc}")
def on_message(client, userdata, msg):
# ಸಂದೇಶದ ಪೇಲೋಡ್ ಅನ್ನು ಬೈಟ್ಗಳಿಂದ ಸ್ಟ್ರಿಂಗ್ಗೆ ಡಿಕೋಡ್ ಮಾಡಿ
payload = msg.payload.decode()
print(f"ಸಂದೇಶವನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ: `{payload}` on topic `{msg.topic}`")
# --- ಮುಖ್ಯ ಸ್ಕ್ರಿಪ್ಟ್ ---
# 1. ಕ್ಲೈಂಟ್ ಇನ್ಸ್ಟೆನ್ಸ್ ರಚಿಸಿ
client = mqtt.Client("SubscriberClient")
# 2. ಕಾಲ್ಬ್ಯಾಕ್ಗಳನ್ನು ನಿಯೋಜಿಸಿ
client.on_connect = on_connect
client.on_message = on_message
# 3. ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಿಸಿ
client.connect(BROKER_ADDRESS, PORT, 60)
# 4. ನೆಟ್ವರ್ಕ್ ಲೂಪ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ (ಬ್ಲಾಕಿಂಗ್ ಕಾಲ್)
# ಈ ಕಾರ್ಯವು ಮರುಸಂಪರ್ಕ ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವುದನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ.
print("ಚಂದಾದಾರರು ಕೇಳುತ್ತಿದ್ದಾರೆ...")
client.loop_forever()
ಉದಾಹರಣೆಯನ್ನು ಚಲಾಯಿಸುವುದು
- ಎರಡು ಪ್ರತ್ಯೇಕ ಟರ್ಮಿನಲ್ ವಿಂಡೋಗಳನ್ನು ತೆರೆಯಿರಿ.
- ಮೊದಲ ಟರ್ಮಿನಲ್ನಲ್ಲಿ, ಚಂದಾದಾರ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಚಲಾಯಿಸಿ:
python subscriber.py - ನಿಮಗೆ "ಚಂದಾದಾರರು ಕೇಳುತ್ತಿದ್ದಾರೆ..." ಎಂಬ ಸಂದೇಶ ಕಾಣಿಸಬೇಕು. ಇದು ಈಗ ಸಂದೇಶಗಳಿಗಾಗಿ ಕಾಯುತ್ತಿದೆ.
- ಎರಡನೇ ಟರ್ಮಿನಲ್ನಲ್ಲಿ, ಪ್ರಕಾಶಕ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಚಲಾಯಿಸಿ:
python publisher.py - ಪ್ರಕಾಶಕರು ಪ್ರತಿ ಎರಡು ಸೆಕೆಂಡ್ಗಳಿಗೆ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವುದನ್ನು ನೀವು ನೋಡುತ್ತೀರಿ. ಅದೇ ಸಮಯದಲ್ಲಿ, ಈ ಸಂದೇಶಗಳು ಚಂದಾದಾರರ ಟರ್ಮಿನಲ್ ವಿಂಡೋದಲ್ಲಿ ಕಾಣಿಸಿಕೊಳ್ಳುತ್ತವೆ.
ಅಭಿನಂದನೆಗಳು! ನೀವು ಇದೀಗ ಪೈಥಾನ್ ಅನ್ನು ಬಳಸಿಕೊಂಡು ಸಂಪೂರ್ಣ, ಕಾರ್ಯನಿರ್ವಹಿಸುವ MQTT ಸಂವಹನ ವ್ಯವಸ್ಥೆಯನ್ನು ರಚಿಸಿದ್ದೀರಿ.
ಮೂಲಭೂತ ಅಂಶಗಳ ಆಚೆ: ಸುಧಾರಿತ Paho-MQTT ವೈಶಿಷ್ಟ್ಯಗಳು
ನಮ್ಮ ಸರಳ ಉದಾಹರಣೆಗಿಂತ ನೈಜ-ಪ್ರಪಂಚದ IoT ವ್ಯವಸ್ಥೆಗಳಿಗೆ ಹೆಚ್ಚು ದೃಢತೆ ಬೇಕಾಗುತ್ತದೆ. ಉತ್ಪಾದನೆ-ಸಿದ್ಧ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು ಅಗತ್ಯವಿರುವ ಕೆಲವು ಸುಧಾರಿತ MQTT ವೈಶಿಷ್ಟ್ಯಗಳನ್ನು ಅನ್ವೇಷಿಸೋಣ.
ಕೊನೆಯ ಇಚ್ಛೆ ಮತ್ತು ಉಯಿಲು (LWT)
ಸೆಕ್ಯುರಿಟಿ ಕ್ಯಾಮೆರಾ ಅಥವಾ ಹಾರ್ಟ್ ಮಾನಿಟರ್ನಂತಹ ನಿರ್ಣಾಯಕ ಸಾಧನವು ವಿದ್ಯುತ್ ವೈಫಲ್ಯ ಅಥವಾ ನೆಟ್ವರ್ಕ್ ನಷ್ಟದಿಂದ ಅನಿರೀಕ್ಷಿತವಾಗಿ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿದರೆ ಏನಾಗುತ್ತದೆ? LWT ವೈಶಿಷ್ಟ್ಯವು MQTT ಯ ಪರಿಹಾರವಾಗಿದೆ. ಕ್ಲೈಂಟ್ ಸಂಪರ್ಕಗೊಂಡಾಗ, ಅದು ಬ್ರೋಕರ್ನೊಂದಿಗೆ "ಕೊನೆಯ ಇಚ್ಛೆ" ಸಂದೇಶವನ್ನು ನೋಂದಾಯಿಸಬಹುದು. ಕ್ಲೈಂಟ್ ಅನಪೇಕ್ಷಿತವಾಗಿ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿದರೆ (ಡಿಸ್ಕನೆಕ್ಟ್ ಪ್ಯಾಕೆಟ್ ಕಳುಹಿಸದೆ), ಬ್ರೋಕರ್ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಈ ಕೊನೆಯ ಇಚ್ಛೆಯ ಸಂದೇಶವನ್ನು ಅದರ ಪರವಾಗಿ ನಿರ್ದಿಷ್ಟ ವಿಷಯಕ್ಕೆ ಪ್ರಕಟಿಸುತ್ತದೆ.
ಸಾಧನದ ಸ್ಥಿತಿಯನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಲು ಇದು ಅಮೂಲ್ಯವಾಗಿದೆ. ನೀವು ಸಾಧನವನ್ನು ಸಂಪರ್ಕಿಸಿದಾಗ "online" ಪೇಲೋಡ್ನೊಂದಿಗೆ `devices/device-123/status` ಸಂದೇಶವನ್ನು ಪ್ರಕಟಿಸಬಹುದು ಮತ್ತು ಅದೇ ವಿಷಯದೊಂದಿಗೆ ಆದರೆ "offline" ಪೇಲೋಡ್ನೊಂದಿಗೆ LWT ಸಂದೇಶವನ್ನು ನೋಂದಾಯಿಸಬಹುದು. ಈ ವಿಷಯಕ್ಕೆ ಚಂದಾದಾರರಾಗಿರುವ ಯಾವುದೇ ಮೇಲ್ವಿಚಾರಣಾ ಸೇವೆಯು ಸಾಧನದ ಸ್ಥಿತಿಯನ್ನು ತಕ್ಷಣವೇ ತಿಳಿಯುತ್ತದೆ.
Paho-MQTT ನಲ್ಲಿ LWT ಅನ್ನು ಅಳವಡಿಸಲು, ನೀವು ಸಂಪರ್ಕಿಸುವ ಮೊದಲು ಅದನ್ನು ಹೊಂದಿಸಿ:
client.will_set('devices/device-123/status', payload='offline', qos=1, retain=True)
client.connect(BROKER_ADDRESS, PORT, 60)
ಉಳಿದ ಸಂದೇಶಗಳು
ಸಾಮಾನ್ಯವಾಗಿ, ಒಂದು ಚಂದಾದಾರರು ವಿಷಯಕ್ಕೆ ಸಂಪರ್ಕಿಸಿದರೆ, ಅದು ಚಂದಾದಾರರಾದ ನಂತರ ಪ್ರಕಟಿಸಲಾದ ಸಂದೇಶಗಳನ್ನು ಮಾತ್ರ ಸ್ವೀಕರಿಸುತ್ತದೆ. ಆದರೆ ನಿಮಗೆ ತಕ್ಷಣವೇ ಇತ್ತೀಚಿನ ಮೌಲ್ಯ ಬೇಕಾದರೆ ಏನು ಮಾಡಬೇಕು? ಇದಕ್ಕಾಗಿಯೇ ಉಳಿದ ಸಂದೇಶಗಳು ಇವೆ. `retain` ಫ್ಲ್ಯಾಗ್ ಅನ್ನು `True` ಗೆ ಹೊಂದಿಸಿ ಸಂದೇಶವನ್ನು ಪ್ರಕಟಿಸಿದಾಗ, ಬ್ರೋಕರ್ ಆ ನಿರ್ದಿಷ್ಟ ವಿಷಯಕ್ಕಾಗಿ ಆ ಸಂದೇಶವನ್ನು ಸಂಗ್ರಹಿಸುತ್ತದೆ. ಯಾವುದೇ ಸಮಯದಲ್ಲಿ ಹೊಸ ಕ್ಲೈಂಟ್ ಆ ವಿಷಯಕ್ಕೆ ಚಂದಾದಾರರಾದಾಗ, ಅದು ಕೊನೆಯ ಉಳಿದ ಸಂದೇಶವನ್ನು ತಕ್ಷಣವೇ ಸ್ವೀಕರಿಸುತ್ತದೆ.
ಸ್ಥಿತಿ ಮಾಹಿತಿಗಾಗಿ ಇದು ಪರಿಪೂರ್ಣವಾಗಿದೆ. ಒಂದು ಸಾಧನವು ತನ್ನ ಸ್ಥಿತಿಯನ್ನು (ಉದಾಹರಣೆಗೆ, `{"state": "ON"}`) `retain=True` ಯೊಂದಿಗೆ ಪ್ರಕಟಿಸಬಹುದು. ಪ್ರಾರಂಭಗೊಳ್ಳುವ ಮತ್ತು ಚಂದಾದಾರರಾಗುವ ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್ ಮುಂದಿನ ಅಪ್ಡೇಟ್ಗಾಗಿ ಕಾಯದೆ ಸಾಧನದ ಪ್ರಸ್ತುತ ಸ್ಥಿತಿಯನ್ನು ತಕ್ಷಣವೇ ತಿಳಿಯುತ್ತದೆ.
Paho-MQTT ನಲ್ಲಿ, ನಿಮ್ಮ ಪ್ರಕಟಣೆ ಕರೆಯಲ್ಲಿ `retain` ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಸೇರಿಸಿ:
client.publish(TOPIC, payload, qos=1, retain=True)
ನಿರಂತರ ಸೆಷನ್ಗಳು ಮತ್ತು ಕ್ಲೀನ್ ಸೆಷನ್ಗಳು
ಕ್ಲೈಂಟ್ನ ಸಂಪರ್ಕ ವಿನಂತಿಯಲ್ಲಿನ `clean_session` ಫ್ಲ್ಯಾಗ್ ಬ್ರೋಕರ್ ಕ್ಲೈಂಟ್ನ ಸೆಷನ್ ಅನ್ನು ಹೇಗೆ ನಿರ್ವಹಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನಿಯಂತ್ರಿಸುತ್ತದೆ.
- ಕ್ಲೀನ್ ಸೆಷನ್ (
clean_session=True, ಡೀಫಾಲ್ಟ್): ಕ್ಲೈಂಟ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿದಾಗ, ಬ್ರೋಕರ್ ಅದರ ಬಗ್ಗೆ ಎಲ್ಲಾ ಮಾಹಿತಿಯನ್ನು ತ್ಯಜಿಸುತ್ತದೆ, ಅದರ ಚಂದಾದಾರಿಕೆಗಳು ಮತ್ತು ಯಾವುದೇ ಕ್ಯೂಡ್ QoS 1 ಅಥವಾ 2 ಸಂದೇಶಗಳು ಸೇರಿದಂತೆ. ಅದು ಮರುಸಂಪರ್ಕಗೊಂಡಾಗ, ಅದು ಹೊಸ ಕ್ಲೈಂಟ್ನಂತೆ ಇರುತ್ತದೆ. - ನಿರಂತರ ಸೆಷನ್ (
clean_session=False): ಅನನ್ಯ ಕ್ಲೈಂಟ್ ID ಯೊಂದಿಗೆ ಕ್ಲೈಂಟ್ ಈ ರೀತಿ ಸಂಪರ್ಕಿಸಿದಾಗ, ಬ್ರೋಕರ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡ ನಂತರವೂ ಅದರ ಸೆಷನ್ ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. ಇದು ಅದರ ಚಂದಾದಾರಿಕೆಗಳು ಮತ್ತು ಅದು ಆಫ್ಲೈನ್ ಆಗಿದ್ದಾಗ ಪ್ರಕಟಿಸಲಾದ ಯಾವುದೇ QoS 1 ಅಥವಾ 2 ಸಂದೇಶಗಳನ್ನು ಒಳಗೊಂಡಿದೆ. ಕ್ಲೈಂಟ್ ಮರುಸಂಪರ್ಕಗೊಂಡಾಗ, ಬ್ರೋಕರ್ ಎಲ್ಲಾ ತಪ್ಪಿದ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುತ್ತದೆ. ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲದ ನೆಟ್ವರ್ಕ್ಗಳಲ್ಲಿ ನಿರ್ಣಾಯಕ ಆಜ್ಞೆಗಳನ್ನು ಕಳೆದುಕೊಳ್ಳಲು ಸಾಧ್ಯವಾಗದ ಸಾಧನಗಳಿಗೆ ಇದು ನಿರ್ಣಾಯಕವಾಗಿದೆ.
ನಿರಂತರ ಸೆಷನ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲು, ನೀವು ಕ್ಲೈಂಟ್ ಇನ್ಸ್ಟೆನ್ಸ್ ಅನ್ನು ರಚಿಸುವಾಗ ಸ್ಥಿರವಾದ, ಅನನ್ಯ ಕ್ಲೈಂಟ್ ID ಅನ್ನು ಒದಗಿಸಬೇಕು ಮತ್ತು `clean_session=False` ಅನ್ನು ಹೊಂದಿಸಬೇಕು:
client = mqtt.Client(client_id="my-persistent-device-001", clean_session=False)
ಭದ್ರತೆ ಒಂದು ಆಯ್ಕೆಯಲ್ಲ: ಪೈಥಾನ್ನೊಂದಿಗೆ MQTT ಅನ್ನು ಸುರಕ್ಷಿತಗೊಳಿಸುವುದು
ಯಾವುದೇ ನೈಜ-ಪ್ರಪಂಚದ ಅಪ್ಲಿಕೇಶನ್ನಲ್ಲಿ, ಭದ್ರತೆಯು ಅತ್ಯುನ್ನತವಾಗಿದೆ. ಅಸುರಕ್ಷಿತ MQTT ಬ್ರೋಕರ್ ದುರುದ್ದೇಶಪೂರಿತ ನಟರಿಗೆ ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಕದ್ದಾಲಿಸಲು, ನಿಮ್ಮ ಸಾಧನಗಳಿಗೆ ತಪ್ಪು ಆಜ್ಞೆಗಳನ್ನು ಕಳುಹಿಸಲು ಅಥವಾ ಸೇವಾ ನಿರಾಕರಣೆ ದಾಳಿಗಳನ್ನು ಪ್ರಾರಂಭಿಸಲು ಮುಕ್ತ ಆಹ್ವಾನವಾಗಿದೆ. MQTT ಅನ್ನು ಸುರಕ್ಷಿತಗೊಳಿಸುವುದು ಮೂರು ಪ್ರಮುಖ ಸ್ತಂಭಗಳನ್ನು ಒಳಗೊಂಡಿದೆ: ದೃಢೀಕರಣ (Authentication), ಎನ್ಕ್ರಿಪ್ಶನ್ (Encryption), ಮತ್ತು ಅಧಿಕಾರ ನೀಡುವಿಕೆ (Authorization).
ದೃಢೀಕರಣ: ನೀವು ಯಾರು?
ದೃಢೀಕರಣವು ಬ್ರೋಕರ್ಗೆ ಸಂಪರ್ಕಿಸುವ ಕ್ಲೈಂಟ್ನ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸುತ್ತದೆ. ಸರಳವಾದ ವಿಧಾನವೆಂದರೆ ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಬಳಸುವುದು. ನಿಮ್ಮ Mosquitto ಬ್ರೋಕರ್ ಅನ್ನು ರುಜುವಾತುಗಳನ್ನು ಅಗತ್ಯಪಡಿಸಲು ನೀವು ಕಾನ್ಫಿಗರ್ ಮಾಡಬಹುದು ಮತ್ತು ನಂತರ ಅವುಗಳನ್ನು ನಿಮ್ಮ ಪೈಥಾನ್ ಕ್ಲೈಂಟ್ನಲ್ಲಿ ಒದಗಿಸಬಹುದು.
ನಿಮ್ಮ ಪೈಥಾನ್ ಕ್ಲೈಂಟ್ನಲ್ಲಿ, ನೀವು `username_pw_set()` ವಿಧಾನವನ್ನು ಬಳಸಿ:
client.username_pw_set(username="myuser", password="mypassword")
client.connect(BROKER_ADDRESS, PORT, 60)
ಎನ್ಕ್ರಿಪ್ಶನ್: TLS/SSL ನೊಂದಿಗೆ ಸಾಗಾಣಿಕೆಯ ಸಮಯದಲ್ಲಿ ಡೇಟಾವನ್ನು ರಕ್ಷಿಸುವುದು
ಬಳಕೆದಾರಹೆಸರು ಮತ್ತು ಪಾಸ್ವರ್ಡ್ಗಳನ್ನು ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಸರಳ ಪಠ್ಯದಲ್ಲಿ ಕಳುಹಿಸಿದರೆ ಅವುಗಳ ಉಪಯೋಗ ಕಡಿಮೆ. ಎನ್ಕ್ರಿಪ್ಶನ್ ಕ್ಲೈಂಟ್ ಮತ್ತು ಬ್ರೋಕರ್ ನಡುವಿನ ಎಲ್ಲಾ ಸಂವಹನವನ್ನು ಸ್ಕ್ರ್ಯಾಂಬಲ್ ಮಾಡಲಾಗಿದೆ ಮತ್ತು ನೆಟ್ವರ್ಕ್ನಲ್ಲಿ ಬೇಹುಗಾರಿಕೆ ಮಾಡುವ ಯಾರಿಗೂ ಓದಲು ಸಾಧ್ಯವಾಗದಂತೆ ಖಚಿತಪಡಿಸುತ್ತದೆ. ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಸುರಕ್ಷಿತಗೊಳಿಸುವ (HTTPS) ಅದೇ ತಂತ್ರಜ್ಞಾನವಾದ ಟ್ರಾನ್ಸ್ಪೋರ್ಟ್ ಲೇಯರ್ ಸೆಕ್ಯುರಿಟಿ (TLS) ಅನ್ನು ಬಳಸಿಕೊಂಡು ಇದನ್ನು ಸಾಧಿಸಲಾಗುತ್ತದೆ.
MQTT ಯೊಂದಿಗೆ TLS ಅನ್ನು ಬಳಸಲು (ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ MQTTS ಎಂದು ಕರೆಯಲಾಗುತ್ತದೆ), ನಿಮ್ಮ ಬ್ರೋಕರ್ ಅನ್ನು ಅದನ್ನು ಬೆಂಬಲಿಸಲು (ಸಾಮಾನ್ಯವಾಗಿ ಪೋರ್ಟ್ 8883 ರಲ್ಲಿ) ಕಾನ್ಫಿಗರ್ ಮಾಡಬೇಕು ಮತ್ತು ನಿಮ್ಮ ಕ್ಲೈಂಟ್ಗೆ ಅಗತ್ಯ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಒದಗಿಸಬೇಕು. ಇದು ಸಾಮಾನ್ಯವಾಗಿ ಬ್ರೋಕರ್ನ ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಲು ಪ್ರಮಾಣಪತ್ರ ಪ್ರಾಧಿಕಾರ (CA) ಪ್ರಮಾಣಪತ್ರವನ್ನು ಒಳಗೊಂಡಿರುತ್ತದೆ.
Paho-MQTT ನಲ್ಲಿ, ನೀವು `tls_set()` ವಿಧಾನವನ್ನು ಬಳಸುತ್ತೀರಿ:
client.tls_set(ca_certs="path/to/ca.crt")
client.connect(BROKER_ADDRESS, 8883, 60)
ಅಧಿಕಾರ ನೀಡುವಿಕೆ: ನಿಮಗೆ ಏನು ಮಾಡಲು ಅನುಮತಿ ಇದೆ?
ಒಮ್ಮೆ ಕ್ಲೈಂಟ್ ಅನ್ನು ದೃಢೀಕರಿಸಿದ ನಂತರ, ಅಧಿಕಾರ ನೀಡುವಿಕೆಯು ಅದನ್ನು ಏನು ಮಾಡಲು ಅನುಮತಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ನಿರ್ಧರಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ತಾಪಮಾನ ಸಂವೇದಕವನ್ನು ತನ್ನದೇ ಆದ ವಿಷಯಕ್ಕೆ (ಉದಾಹರಣೆಗೆ, `sensors/temp-A/data`) ಮಾತ್ರ ಪ್ರಕಟಿಸಲು ಅನುಮತಿಸಬೇಕು, ಆದರೆ ಕಾರ್ಖಾನೆಯ ಯಂತ್ರೋಪಕರಣಗಳನ್ನು ನಿಯಂತ್ರಿಸಲು ಬಳಸುವ ವಿಷಯಕ್ಕೆ (ಉದಾಹರಣೆಗೆ, `factory/floor-1/robot-arm/command`) ಪ್ರಕಟಿಸಲು ಅನುಮತಿಸಬಾರದು. ಇದನ್ನು ಸಾಮಾನ್ಯವಾಗಿ ಬ್ರೋಕರ್ನಲ್ಲಿ ಪ್ರವೇಶ ನಿಯಂತ್ರಣ ಪಟ್ಟಿಗಳನ್ನು (ACLs) ಬಳಸಿಕೊಂಡು ನಿರ್ವಹಿಸಲಾಗುತ್ತದೆ. ಯಾವ ಬಳಕೆದಾರರು ನಿರ್ದಿಷ್ಟ ವಿಷಯ ಮಾದರಿಗಳಿಗೆ `read` (ಚಂದಾದಾರಿಕೆ) ಅಥವಾ `write` (ಪ್ರಕಟಣೆ) ಮಾಡಬಹುದು ಎಂಬುದನ್ನು ವ್ಯಾಖ್ಯಾನಿಸುವ ನಿಯಮಗಳೊಂದಿಗೆ ನೀವು ಬ್ರೋಕರ್ ಅನ್ನು ಕಾನ್ಫಿಗರ್ ಮಾಡುತ್ತೀರಿ.
ಎಲ್ಲವನ್ನೂ ಒಟ್ಟಾಗಿ ಸೇರಿಸುವುದು: ಒಂದು ಸರಳ ಸ್ಮಾರ್ಟ್ ಪರಿಸರ ಮಾನಿಟರ್ ಯೋಜನೆ
ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ದೃಢೀಕರಿಸಲು ಸ್ವಲ್ಪ ಹೆಚ್ಚು ವಾಸ್ತವಿಕ ಯೋಜನೆಯನ್ನು ನಿರ್ಮಿಸೋಣ. ನಾವು JSON ವಸ್ತುವಾಗಿ ಪರಿಸರ ಡೇಟಾವನ್ನು ಪ್ರಕಟಿಸುವ ಸಂವೇದಕ ಸಾಧನವನ್ನು ಅನುಕರಿಸುತ್ತೇವೆ ಮತ್ತು ಈ ಡೇಟಾಗೆ ಚಂದಾದಾರರಾಗಿ ಅದನ್ನು ಪ್ರದರ್ಶಿಸುವ ಮೇಲ್ವಿಚಾರಣಾ ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ನಿರ್ಮಿಸುತ್ತೇವೆ.
ಯೋಜನೆಯ ಅವಲೋಕನ
- ಸಂವೇದಕ (ಪ್ರಕಾಶಕ): ತಾಪಮಾನ ಮತ್ತು ತೇವಾಂಶವನ್ನು ಓದುವ ಸಂವೇದಕವನ್ನು ಅನುಕರಿಸುವ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್. ಇದು ಈ ಡೇಟಾವನ್ನು JSON ಪೇಲೋಡ್ ಆಗಿ ಪ್ಯಾಕೇಜ್ ಮಾಡುತ್ತದೆ ಮತ್ತು ಪ್ರತಿ 5 ಸೆಕೆಂಡ್ಗಳಿಗೆ
smart_env/device01/telemetryವಿಷಯಕ್ಕೆ ಅದನ್ನು ಪ್ರಕಟಿಸುತ್ತದೆ. - ಮಾನಿಟರ್ (ಚಂದಾದಾರ):
smart_env/device01/telemetryಗೆ ಚಂದಾದಾರರಾಗುವ, JSON ಡೇಟಾವನ್ನು ಸ್ವೀಕರಿಸುವ, ಅದನ್ನು ವಿಶ್ಲೇಷಿಸುವ ಮತ್ತು ಬಳಕೆದಾರ-ಸ್ನೇಹಿ ಸ್ಥಿತಿ ನವೀಕರಣವನ್ನು ಮುದ್ರಿಸುವ ಪೈಥಾನ್ ಸ್ಕ್ರಿಪ್ಟ್.
ಸಂವೇದಕ ಕೋಡ್ (sensor_publisher.py)
import paho.mqtt.client as mqtt
import time
import json
import random
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
client = mqtt.Client("SensorDevice01")
client.connect(BROKER_ADDRESS, PORT, 60)
client.loop_start()
print("ಸಂವೇದಕ ಪ್ರಕಾಶಕ ಪ್ರಾರಂಭವಾಗಿದೆ...")
try:
while True:
# ಸಂವೇದಕ ಓದುವಿಕೆಗಳನ್ನು ಅನುಕರಿಸಿ
temperature = round(random.uniform(20.0, 30.0), 2)
humidity = round(random.uniform(40.0, 60.0), 2)
# JSON ಪೇಲೋಡ್ ರಚಿಸಿ
payload = {
"timestamp": time.time(),
"temperature": temperature,
"humidity": humidity
}
payload_str = json.dumps(payload)
# QoS 1 ರೊಂದಿಗೆ ಸಂದೇಶವನ್ನು ಪ್ರಕಟಿಸಿ
result = client.publish(TOPIC, payload_str, qos=1)
result.wait_for_publish() # ಪ್ರಕಟಣೆ ದೃಢೀಕರಿಸುವವರೆಗೆ ತಡೆಯಿರಿ
print(f"ಪ್ರಕಟಿಸಲಾಗಿದೆ: {payload_str}")
time.sleep(5)
except KeyboardInterrupt:
print("ಸಂವೇದಕ ಪ್ರಕಾಶಕನನ್ನು ನಿಲ್ಲಿಸಲಾಗುತ್ತಿದೆ...")
finally:
client.loop_stop()
client.disconnect()
ಮಾನಿಟರಿಂಗ್ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಕೋಡ್ (monitor_subscriber.py)
import paho.mqtt.client as mqtt
import json
import datetime
BROKER_ADDRESS = "localhost"
PORT = 1883
TOPIC = "smart_env/device01/telemetry"
def on_connect(client, userdata, flags, rc):
print(f"ಫಲಿತಾಂಶ ಕೋಡ್ {rc} ರೊಂದಿಗೆ ಸಂಪರ್ಕಗೊಂಡಿದೆ")
client.subscribe(TOPIC)
def on_message(client, userdata, msg):
print("--- ಹೊಸ ಸಂದೇಶ ಸ್ವೀಕರಿಸಲಾಗಿದೆ ---")
try:
# ಪೇಲೋಡ್ ಸ್ಟ್ರಿಂಗ್ ಅನ್ನು ಡಿಕೋಡ್ ಮಾಡಿ ಮತ್ತು ಅದನ್ನು JSON ಆಗಿ ವಿಶ್ಲೇಷಿಸಿ
payload = json.loads(msg.payload.decode())
timestamp = datetime.datetime.fromtimestamp(payload.get('timestamp'))
temperature = payload.get('temperature')
humidity = payload.get('humidity')
print(f"ಸಾಧನ: {msg.topic}")
print(f"ಸಮಯ: {timestamp.strftime('%Y-%m-%d %H:%M:%S')}")
print(f"ತಾಪಮಾನ: {temperature}°C")
print(f"ಆರ್ದ್ರತೆ: {humidity}%")
except json.JSONDecodeError:
print("JSON ಪೇಲೋಡ್ ಡಿಕೋಡಿಂಗ್ನಲ್ಲಿ ದೋಷ.")
except Exception as e:
print(f"ದೋಷ ಸಂಭವಿಸಿದೆ: {e}")
client = mqtt.Client("MonitoringDashboard")
client.on_connect = on_connect
client.on_message = on_message
client.connect(BROKER_ADDRESS, PORT, 60)
print("ಮಾನಿಟರಿಂಗ್ ಡ್ಯಾಶ್ಬೋರ್ಡ್ ಚಾಲನೆಯಲ್ಲಿದೆ...")
client.loop_forever()
ಪ್ರೊಟೊಟೈಪ್ನಿಂದ ಉತ್ಪಾದನೆಗೆ: MQTT ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು
ನಿಮ್ಮ ಯೋಜನೆಯನ್ನು ಸರಳ ಸ್ಕ್ರಿಪ್ಟ್ನಿಂದ ದೃಢವಾದ, ಸ್ಕೇಲೆಬಲ್ ಉತ್ಪಾದನಾ ವ್ಯವಸ್ಥೆಗೆ ಸಾಗಿಸಲು ಎಚ್ಚರಿಕೆಯ ಯೋಜನೆ ಅಗತ್ಯವಿದೆ. ಇಲ್ಲಿ ಕೆಲವು ಅಗತ್ಯ ಉತ್ತಮ ಅಭ್ಯಾಸಗಳು ಇವೆ:
- ಸ್ಪಷ್ಟ ವಿಷಯ ಕ್ರಮಾನುಗತವನ್ನು ವಿನ್ಯಾಸಗೊಳಿಸಿ: ನಿಮ್ಮ ವಿಷಯ ರಚನೆಯನ್ನು ಮೊದಲಿನಿಂದಲೇ ಎಚ್ಚರಿಕೆಯಿಂದ ಯೋಜಿಸಿ. ಉತ್ತಮ ಕ್ರಮಾನುಗತವು ವಿವರಣಾತ್ಮಕ, ಸ್ಕೇಲೆಬಲ್ ಆಗಿದ್ದು, ವೈಲ್ಡ್ಕಾರ್ಡ್ಗಳನ್ನು ಬಳಸಿಕೊಂಡು ನಮ್ಯ ಚಂದಾದಾರಿಕೆಗಳನ್ನು ಅನುಮತಿಸುತ್ತದೆ. ಒಂದು ಸಾಮಾನ್ಯ ಮಾದರಿ
<site>/<area>/<device_type>/<device_id>/<measurement>ಆಗಿದೆ. - ನೆಟ್ವರ್ಕ್ ಸಂಪರ್ಕ ಕಡಿತಗಳನ್ನು ಸುಲಲಿತವಾಗಿ ನಿರ್ವಹಿಸಿ: ನೆಟ್ವರ್ಕ್ಗಳು ವಿಶ್ವಾಸಾರ್ಹವಲ್ಲ. ನಿಮ್ಮ ಕ್ಲೈಂಟ್ ಕೋಡ್ ದೃಢವಾದ ಮರುಸಂಪರ್ಕ ತರ್ಕವನ್ನು ಅಳವಡಿಸಬೇಕು. Paho-MQTT ನಲ್ಲಿನ `on_disconnect` ಕಾಲ್ಬ್ಯಾಕ್ ಇದನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸೂಕ್ತ ಸ್ಥಳವಾಗಿದೆ, ಮರುಸಂಪರ್ಕ ಪ್ರಯತ್ನಗಳೊಂದಿಗೆ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಪ್ರವಾಹಕ್ಕೆ ಸಿಲುಕಿಸುವುದನ್ನು ತಪ್ಪಿಸಲು ಎಕ್ಸ್ಪೋನೆನ್ಶಿಯಲ್ ಬ್ಯಾಕ್ಆಫ್ನಂತಹ ತಂತ್ರವನ್ನು ಅಳವಡಿಸಬೇಕು.
- ರಚನಾತ್ಮಕ ಡೇಟಾ ಪೇಲೋಡ್ಗಳನ್ನು ಬಳಸಿ: ನಿಮ್ಮ ಸಂದೇಶ ಪೇಲೋಡ್ಗಳಿಗಾಗಿ ಯಾವಾಗಲೂ JSON ಅಥವಾ ಪ್ರೋಟೋಕಾಲ್ ಬಫರ್ಗಳಂತಹ ರಚನಾತ್ಮಕ ಡೇಟಾ ಸ್ವರೂಪವನ್ನು ಬಳಸಿ. ಇದು ನಿಮ್ಮ ಡೇಟಾವನ್ನು ಸ್ವಯಂ-ವಿವರಿಸುವ, ಆವೃತ್ತಿ ಮಾಡಬಹುದಾದ ಮತ್ತು ವಿಭಿನ್ನ ಅಪ್ಲಿಕೇಶನ್ಗಳಿಗೆ (ಯಾವುದೇ ಭಾಷೆಯಲ್ಲಿ ಬರೆಯಲಾಗಿದೆ) ವಿಶ್ಲೇಷಿಸಲು ಸುಲಭವಾಗಿಸುತ್ತದೆ.
- ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ಎಲ್ಲವನ್ನೂ ಸುರಕ್ಷಿತಗೊಳಿಸಿ: ಭದ್ರತೆಯಿಲ್ಲದೆ IoT ವ್ಯವಸ್ಥೆಯನ್ನು ನಿಯೋಜಿಸಬೇಡಿ. ಕನಿಷ್ಠ, ಬಳಕೆದಾರಹೆಸರು/ಪಾಸ್ವರ್ಡ್ ದೃಢೀಕರಣ ಮತ್ತು TLS ಎನ್ಕ್ರಿಪ್ಶನ್ ಬಳಸಿ. ಹೆಚ್ಚಿನ ಭದ್ರತಾ ಅಗತ್ಯಗಳಿಗಾಗಿ, ಕ್ಲೈಂಟ್ ಪ್ರಮಾಣಪತ್ರ ಆಧಾರಿತ ದೃಢೀಕರಣವನ್ನು ಅನ್ವೇಷಿಸಿ.
- ನಿಮ್ಮ ಬ್ರೋಕರ್ ಅನ್ನು ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಿ: ಉತ್ಪಾದನಾ ಪರಿಸರದಲ್ಲಿ, ನಿಮ್ಮ MQTT ಬ್ರೋಕರ್ ಮೂಲಭೂತ ಮೂಲಸೌಕರ್ಯದ ನಿರ್ಣಾಯಕ ಭಾಗವಾಗಿದೆ. CPU/ಮೆಮೊರಿ ಬಳಕೆ, ಸಂಪರ್ಕಿತ ಕ್ಲೈಂಟ್ಗಳ ಸಂಖ್ಯೆ, ಸಂದೇಶ ದರಗಳು ಮತ್ತು ಕೈಬಿಟ್ಟ ಸಂದೇಶಗಳು ಸೇರಿದಂತೆ ಅದರ ಆರೋಗ್ಯವನ್ನು ಟ್ರ್ಯಾಕ್ ಮಾಡಲು ಮೇಲ್ವಿಚಾರಣಾ ಸಾಧನಗಳನ್ನು ಬಳಸಿ. ಅನೇಕ ಬ್ರೋಕರ್ಗಳು ಈ ಸ್ಥಿತಿ ಮಾಹಿತಿಯನ್ನು ಒದಗಿಸುವ ವಿಶೇಷ `$SYS` ವಿಷಯ ಕ್ರಮಾನುಗತವನ್ನು ಬಹಿರಂಗಪಡಿಸುತ್ತವೆ.
ತೀರ್ಮಾನ: ಪೈಥಾನ್ ಮತ್ತು MQTT ಯೊಂದಿಗಿನ ನಿಮ್ಮ ಪ್ರಯಾಣ
ನಾವು MQTT ಯ ಮೂಲಭೂತ "ಏಕೆ" ಯಿಂದ ಪೈಥಾನ್ನೊಂದಿಗೆ ಅದನ್ನು ಅನುಷ್ಠಾನಗೊಳಿಸುವ ಪ್ರಾಯೋಗಿಕ "ಹೇಗೆ" ವರೆಗೆ ಪ್ರಯಾಣಿಸಿದ್ದೇವೆ. ಪ್ರಕಟಿಸು/ಚಂದಾದಾರಿಕೆ ಮಾದರಿಯ ಶಕ್ತಿ, QoS ನ ಪ್ರಾಮುಖ್ಯತೆ ಮತ್ತು ಭದ್ರತೆಯ ನಿರ್ಣಾಯಕ ಪಾತ್ರದ ಬಗ್ಗೆ ನೀವು ಕಲಿತಿದ್ದೀರಿ. ಸಂವೇದಕ ಡೇಟಾವನ್ನು ಪ್ರಕಟಿಸಬಲ್ಲ ಮತ್ತು ಆಜ್ಞೆಗಳಿಗೆ ಚಂದಾದಾರರಾಗಬಲ್ಲ ಅತ್ಯಾಧುನಿಕ ಕ್ಲೈಂಟ್ಗಳನ್ನು ನಿರ್ಮಿಸಲು Paho-MQTT ಲೈಬ್ರರಿ ಹೇಗೆ ಗಮನಾರ್ಹವಾಗಿ ಸರಳಗೊಳಿಸುತ್ತದೆ ಎಂಬುದನ್ನು ನೀವು ನೋಡಿದ್ದೀರಿ.
MQTT ಕೇವಲ ಒಂದು ಪ್ರೋಟೋಕಾಲ್ ಅಲ್ಲ; ಇದು ಇಂಟರ್ನೆಟ್ ಆಫ್ ಥಿಂಗ್ಸ್ನ ಒಂದು ಮೂಲಭೂತ ತಂತ್ರಜ್ಞಾನವಾಗಿದೆ. ಅದರ ಹಗುರವಾದ ಸ್ವಭಾವ ಮತ್ತು ದೃಢವಾದ ವೈಶಿಷ್ಟ್ಯಗಳು ಸ್ಮಾರ್ಟ್ ನಗರಗಳಿಂದ ಸಂಪರ್ಕಿತ ಕೃಷಿಯವರೆಗೆ ಮತ್ತು ಕೈಗಾರಿಕಾ ಯಾಂತ್ರೀಕರಣದವರೆಗೆ ಜಗತ್ತಿನಾದ್ಯಂತ ಲಕ್ಷಾಂತರ ಸಾಧನಗಳಿಗೆ ಇದನ್ನು ಆದ್ಯತೆಯ ಆಯ್ಕೆಯಾಗಿಸಿದೆ.
ಪ್ರಯಾಣ ಇಲ್ಲಿಗೆ ಮುಗಿಯುವುದಿಲ್ಲ. ಮುಂದಿನ ಹಂತವೆಂದರೆ ಈ ಪರಿಕಲ್ಪನೆಗಳನ್ನು ತೆಗೆದುಕೊಂಡು ಅವುಗಳನ್ನು ನೈಜ ಹಾರ್ಡ್ವೇರ್ಗೆ ಅನ್ವಯಿಸುವುದು. ರಾಸ್ಪ್ಬೆರಿ ಪೈ, ESP32, ಅಥವಾ ಇತರ ಮೈಕ್ರೋಕಂಟ್ರೋಲರ್ಗಳೊಂದಿಗೆ ಪ್ರಯೋಗಿಸಿ. ಭೌತಿಕ ಸಂವೇದಕಗಳನ್ನು ಸಂಪರ್ಕಿಸಿ, ಕ್ಲೌಡ್ IoT ಪ್ಲಾಟ್ಫಾರ್ಮ್ಗಳೊಂದಿಗೆ ಸಂಯೋಜಿಸಿ ಮತ್ತು ಭೌತಿಕ ಪ್ರಪಂಚದೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನಿರ್ಮಿಸಿ. ಪೈಥಾನ್ ಮತ್ತು MQTT ಯೊಂದಿಗೆ, ಸಂಪರ್ಕಿತ ಪರಿಹಾರಗಳ ಮುಂದಿನ ಪೀಳಿಗೆಯನ್ನು ನಿರ್ಮಿಸಲು ನೀವು ಶಕ್ತಿಶಾಲಿ ಟೂಲ್ಕಿಟ್ ಅನ್ನು ಹೊಂದಿದ್ದೀರಿ.